﻿

using System.Windows.Controls;
using UBCon.Ribbon.Interfaces;


namespace UBCon.Ribbon
{
    public sealed class RibbonChrome : ContentControl, IRibbonControl
    {
        #region Constructors

        static RibbonChrome()
        {
            System.Type ownerType = typeof(RibbonChrome);
          RibbonChrome.DefaultStyleKeyProperty.OverrideMetadata(ownerType,
                new System.Windows.FrameworkPropertyMetadata(ownerType)
                );
          RibbonChrome.FocusableProperty.OverrideMetadata
              (
                ownerType,
                new System.Windows.FrameworkPropertyMetadata(false)
              );
        }

        /// <summary>
        /// Initializes a new instance of  UBCon.Ribbon.RibbonChrome class.
        /// </summary>
        public RibbonChrome() : base() { }

        #endregion

        #region Properties and Depenency Properties
        
        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.CornerRadius CornerRadius
        {
            get { return (System.Windows.CornerRadius)GetValue(CornerRadiusProperty); }
            set { SetValue(CornerRadiusProperty, value); }
        }

        // Using a DependencyProperty as the backing store for CornerRadius.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty CornerRadiusProperty =
            System.Windows.DependencyProperty.Register("CornerRadius", typeof(System.Windows.CornerRadius), typeof(RibbonChrome), new System.Windows.PropertyMetadata(new System.Windows.CornerRadius(0.0D)));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.CornerRadius InnerBorderCornerRadius
        {
            get { return (System.Windows.CornerRadius)GetValue(InnerBorderCornerRadiusProperty); }
            set { SetValue(InnerBorderCornerRadiusProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderCornerRadius.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty InnerBorderCornerRadiusProperty =
            System.Windows.DependencyProperty.Register("InnerBorderCornerRadius", typeof(System.Windows.CornerRadius), typeof(RibbonChrome), new System.Windows.PropertyMetadata(new System.Windows.CornerRadius(0D)));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Thickness InnerBorderThickness
        {
            get { return (System.Windows.Thickness)GetValue(InnerBorderThicknessProperty); }
            set { SetValue(InnerBorderThicknessProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderThickness.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty InnerBorderThicknessProperty =
            System.Windows.DependencyProperty.Register("InnerBorderThickness", typeof(System.Windows.Thickness), typeof(RibbonChrome), new System.Windows.PropertyMetadata(new System.Windows.Thickness(0D)));
        
        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Media.Brush InnerBorderBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(InnerBorderBrushProperty); }
            set { SetValue(InnerBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty InnerBorderBrushProperty =
            System.Windows.DependencyProperty.Register("InnerBorderBrush", typeof(System.Windows.Media.Brush), typeof(RibbonChrome));
        
        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public bool AnimateTransition
        {
            get { return (bool)GetValue(AnimateTransitionProperty); }
            set { SetValue(AnimateTransitionProperty, value); }
        }

        // Using a DependencyProperty as the backing store for AnimateTransition.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty AnimateTransitionProperty =
            System.Windows.DependencyProperty.Register("AnimateTransition", typeof(bool), typeof(RibbonChrome), new System.Windows.PropertyMetadata(false));


        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public bool RenderPressed
        {
            get { return (bool)GetValue(RenderPressedProperty); }
            set { SetValue(RenderPressedProperty, value); }
        }

        // Using a DependencyProperty as the backing store for RenderPressed.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty RenderPressedProperty =
            System.Windows.DependencyProperty.Register("RenderPressed", typeof(bool), typeof(RibbonChrome));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public bool RenderMouseOver
        {
            get { return (bool)GetValue(RenderMouseOverProperty); }
            set { SetValue(RenderMouseOverProperty, value); }
        }

        // Using a DependencyProperty as the backing store for RenderMouseOver.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty RenderMouseOverProperty =
            System.Windows.DependencyProperty.Register("RenderMouseOver", typeof(bool), typeof(RibbonChrome), new System.Windows.PropertyMetadata(false));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Media.Brush MouseOverBorderBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(MouseOverBorderBrushProperty); }
            set { SetValue(MouseOverBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MouseOverBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty MouseOverBorderBrushProperty =
            System.Windows.DependencyProperty.Register("MouseOverBorderBrush", typeof(System.Windows.Media.Brush), typeof(RibbonChrome));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Media.Brush MouseOverBackgroundBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(MouseOverBackgroundBrushProperty); }
            set { SetValue(MouseOverBackgroundBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MouseOverBackgroundBrush.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty MouseOverBackgroundBrushProperty =
            System.Windows.DependencyProperty.Register("MouseOverBackgroundBrush", typeof(System.Windows.Media.Brush), typeof(RibbonChrome));


        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Media.Brush PressedBackgroundBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(PressedBackgroundBrushProperty); }
            set { SetValue(PressedBackgroundBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for PressedBackgroundBrush.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty PressedBackgroundBrushProperty =
            System.Windows.DependencyProperty.Register("PressedBackgroundBrush", typeof(System.Windows.Media.Brush), typeof(RibbonChrome));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public System.Windows.Media.Brush PressedBorderBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(PressedBorderBrushProperty); }
            set { SetValue(PressedBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for PressedBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty PressedBorderBrushProperty =
            System.Windows.DependencyProperty.Register("PressedBorderBrush", typeof(System.Windows.Media.Brush), typeof(RibbonChrome));

        [System.ComponentModel.Bindable(true), System.ComponentModel.Browsable(false)]
        public bool AnimatesSlowly
        {
            get { return (bool)GetValue(AnimatesSlowlyProperty); }
            set { SetValue(AnimatesSlowlyProperty, value); }
        }

        // Using a DependencyProperty as the backing store for AnimatesSlow.  This enables animation, styling, binding, etc...
        public static readonly System.Windows.DependencyProperty AnimatesSlowlyProperty =
            System.Windows.DependencyProperty.Register("AnimatesSlowly", typeof(bool), typeof(RibbonChrome), new System.Windows.PropertyMetadata(false));

        #endregion

        #region Depenency Property Changed Callbacks
        #endregion

        #region Overrieds

        #endregion

        #region Private Utilities
        #endregion

        #region Event Handlers

        #endregion

        #region Fields
        #endregion
       
        #region IRibbonControl Implementation

        /// <summary>
        /// Gets a boolean value indicating whether the contol's size is large
        /// </summary>
        public bool IsLarge
        {
            get { return false; }
        }

        #endregion
    }
}
